layui.define(['formUtil', 'nprogress'], function(exports) {
  var $ = layui.jquery
    , form = layui.formUtil
    , NProgress = layui.nprogress
    , data = layui.url().search
    , type = data.type
    , id = data.id;

  NProgress.start();

  var ksForm = {
    config: {
      form: 'dataForm',
      basePath: '',// 资源路径
      model: '',// 模块名称
      action: { // 默认使用 basePath+model的标准restful请求，若定义了action，则使用action的请求
        search: '', //自定义搜索请求
        create: '',//自定义创建请求
        update: ''//自定义更新请求
      },
      breadcrumbs: [], //面包屑导航
      value: null,//使用静态数据初始化
      lines: null,//若isStatic为false，则使用本属性动态生成form
      events: [], // 自定义form事件
      initMethod: null,// 初始化页面时调用的方法
      beforeCreate: null,// 创建之前调用的方法
      beforeUpdate: null, // 更新之前调用的方法
      success: null, // 默认成功方法
      submit: null, // 提交方法
      submitType: 'form',// 分为 form / json。一般带有明细表的时候，使用json方式提交
      afterInit: null // 页面初始化完成之后调用的方法
    },
    defaultSuccess: form.defaultSuccess,
    getModelId: function() {
      return id;
    },
    getType: function() {
      return type
    },
    set: function(options) {
      let that = this;
      $.extend(true, that.config, options);
      return that;
    },
    val: function(value, filter) {
      return form.val(filter || this.config.form, value)
    },
    render: function() {
      form.render(null, this.config.form)
    },
    renderSelect: function() {
      form.render('select', this.config.form)
    },
    init: function() {
      var _config = this.config;
      // 初始化导航
      form.initBreadcrumbs(type, _config.breadcrumbs);
      // 初始化动态元素
      if(_config.lines) {
        form.initDynamicElements("form .ok-form", _config.lines, type);
      }
      // 初始化动态下拉框
      form.initSelect(_config.form, {async: false});
      //初始化表单数据
      form.initForm(_config, id);
      if(type === 'view' && location.href.indexOf('_form') > 0) {
        $("input,select,textarea").attr('disabled', true);
        $("#btnDiv").remove();
      } else {
        // 设置是否要隐藏的元素
        $('[data-scope="view"]').remove();
        // 初始化时间控件
        form.initDate();
        // 初始化表单提交事件
        form.initSubmitEvent('ok-form', type, _config);
        //初始化其他自定义事件
        form.initEvents(_config);
      }
      // 初始化富文本控件
      form.initTextarea(_config.model);
      //初始化结束后的操作
      if(typeof _config.afterInit === 'function') {
        _config.afterInit();
      }
      NProgress.done();
    }
  };

  exports('ksForm', ksForm);
});
